package user

import (
	"Project/global"
	"Project/model/common/response"
	"Project/model/user/request"
	"Project/utils"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"log"
	"strconv"
)

type SuperApi struct{}

// CreateUser 创建用户
func (s *SuperApi) CreateUser(c *gin.Context) {
	var userinfo request.UserInfo
	if err := c.ShouldBindJSON(&userinfo); err != nil {
		log.Println("绑定参数失败")
		global.GVA_LOG.Error("绑定参数失败", zap.Error(err))
		response.Fail(c)
		return
	}
	// 创建用户
	if err := userSuperService.CreateUser(userinfo); err != nil {
		log.Println("创建用户失败")
		global.GVA_LOG.Error("创建用户失败", zap.Error(err))
		response.Fail(c)
		return
	}
	response.Ok(c)
}

// SuperInfo 获取超级管理员个人信息
func (s *SuperApi) SuperInfo(c *gin.Context) {
	userID := utils.GetUserID(c)
	// 创建用户
	data, err := userSuperService.SuperInfo(userID)
	if err != nil {
		log.Println("获取用户信息失败")
		global.GVA_LOG.Error("获取用户信息失败", zap.Error(err))
		response.Fail(c)
		return
	}
	response.OkWithDetailed(data, "操作成功", c)
}

// EditorPassword 修改超级管理员密码
func (s *SuperApi) EditorPassword(c *gin.Context) {
	var passwordInfo request.SuperPwd
	if err := c.ShouldBindJSON(&passwordInfo); err != nil {
		log.Println("获取参数失败", err)
		global.GVA_LOG.Error("获取参数失败", zap.Error(err))
		response.FailWithMessage("参数绑定失败", c)
		return
	}
	userID := utils.GetUserID(c)
	if err := userSuperService.EditorPassword(userID, passwordInfo); err != nil {
		log.Println("修改信息失败", err)
		global.GVA_LOG.Error("修改信息失败", zap.Error(err))
		response.FailWithMessage("修改信息失败", c)
		return
	}
	response.Ok(c)

}

// EditorSuperUserInfo 修改超级管理员信息
func (s *SuperApi) EditorSuperUserInfo(c *gin.Context) {
	var userInfo request.SuperInfo
	if err := c.ShouldBindJSON(&userInfo); err != nil {
		log.Println("获取参数失败", err)
		global.GVA_LOG.Error("获取参数失败", zap.Error(err))
		response.FailWithMessage("参数绑定失败", c)
		return
	}
	userID := utils.GetUserID(c)
	if err := userSuperService.EditorSuperInfo(userID, userInfo); err != nil {
		log.Println("修改信息失败", err)
		global.GVA_LOG.Error("修改信息失败", zap.Error(err))
		response.FailWithMessage("修改信息失败", c)
		return
	}
	response.Ok(c)

}

// AllAreaUserList 获取所有区县用户
func (s *SuperApi) AllAreaUserList(c *gin.Context) {
	data, err := userSuperService.AllAreaUserList()
	if err != nil {
		log.Println("查询失败", err)
		global.GVA_LOG.Error("查询失败", zap.Error(err))
		response.FailWithMessage("查询失败", c)
		return
	}
	response.OkWithDetailed(data, "操作成功", c)
}

// EditorAreaUserInfo 修改区县用户信息
func (s *SuperApi) EditorAreaUserInfo(c *gin.Context) {
	var userInfo request.AreaInfo
	if err := c.ShouldBindJSON(&userInfo); err != nil {
		log.Println("获取参数失败", err)
		global.GVA_LOG.Error("获取参数失败", zap.Error(err))
		response.FailWithMessage("参数绑定失败", c)
		return
	}
	// 修改区县用户信息
	if err := userSuperService.EditorAreaUserInfo(userInfo); err != nil {
		log.Println("删除失败")
		global.GVA_LOG.Error("删除失败", zap.Error(err))
		response.Fail(c)
		return
	}
	response.Ok(c)

}

// DelAreaUserInfo 删除区县用户
func (s *SuperApi) DelAreaUserInfo(c *gin.Context) {
	userID, err := strconv.ParseInt(c.Query("user_id"), 10, 64)
	if err != nil {
		log.Println("参数有误,绑定失败")
		global.GVA_LOG.Error("参数有误,绑定失败", zap.Error(err))
		response.Fail(c)
		return
	}
	// 删除区县用户
	if err = userSuperService.DelAreaUserInfo(userID); err != nil {
		log.Println("删除失败")
		global.GVA_LOG.Error("删除失败", zap.Error(err))
		response.Fail(c)
		return
	}
	response.Ok(c)
}
